由于期末考的原因, 好久没写题了, 做hitcon training 的题目来熟悉熟悉
sysmagic
查看保护可以看到程序没开pie与got, plt 表之类的可以改写
程序逻辑比较简单不啰嗦了, 经过观察buf的值不可控
但是flag比较明显是for循环内输出的东西, 而putchar 内的数据代码中都有, 所以第一想法是写个C语言脚本直接输出
1 | 1 |
flag:
看到flag的瞬间毫无防备的留下了弱者的泪水, 能动态调试为什么要费时间写脚本呢…
orw
查看保护除了栈溢出保护其它保护全关了
程序逻辑简单, 要求输入shellcode来执行指令, 不过程序用了沙箱禁用了exceve系统调用, 不过没有禁用read, write, open等系统调用, 所以可以通过执行这三个系统调用直接把flag读出来
关于沙箱这篇文章讲的比较详细:seccomp学习笔记
通过执行seccomp-tools dump ./orw 可以查看可以执行哪些系统调用
系统调用号查询:linux 系统调用号表
汇编代码(我用的是ATT格式):
1 | 1 .section .text |
成功读取flag(由于没有靶机, 所以我在本地创建了一个flag文件)
ret2sc
保护全关
看到程序逻辑就是栈迁移执行shellcode
具体步骤为将shellcode植入到bss段, 之后再将栈迁移到bss段中,然后就可以getshell了
1 | 1 #!/usr/bin/python2 |
成功getshell
ret2lib
除了栈上数据不可执行以外的保护全关了
程序逻辑分析:
程序中可以指定一个地址并且输出这个地址的内容, 随后的print_message函数中很明显存在栈溢出
那么思路就比较明了了, 先泄露libc地址, 随后计算出libc基址,之后利用栈溢出执行system, 最后getshell
由于泄露地址后可以直接利用LibcSearcher 搜索出libc版本, 为了方便我直接用本机的libc版本
1 | 1 #!/usr/bin/python2 |
成功getshell
simplerop
除了NX其它全关
观察程序逻辑只有一个栈溢出, 而这个文件是个静态链接的文件,尝试找system的地址, 但是查找符号表没找到system
但是open, write, read的地址都可以找到, 这意味着跟前面的题目思路一样, 利用rop调用这三个函数来读取flag
1 | 1 #!/usr/bin/python2 |
结果:
- Post link: http://wafuter.jxustctf.top/2020/01/05/HITCON-training-writeup/
- Copyright Notice: All articles in this blog are licensed under unless stating additionally.



若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues